Alexander Larsson [Mon, 14 Dec 2015 09:58:53 +0000 (10:58 +0100)]
repo: After renaming in all loose objects, ensure metadata is stable
When a transaction is finished and we have moved all the staged loose
objects into the repo we fsync all the object directory, to ensure the
filenames are stable before we update the refs files to point to the
new commits.
With out this an unclean shutdown after the transaction is finished
could result in a refs file that points to an incomplete commit.
https://bugzilla.gnome.org/show_bug.cgi?id=759442
Closes: #918
Approved by: cgwalters
Colin Walters [Wed, 7 Jun 2017 17:18:04 +0000 (13:18 -0400)]
repo/commit: Support group-writable files for bare-user-only
These exist in the wild for flatpak, and aren't really a problem. The canonical
permissions are still either `0755` or `0644`, we just support the additional
writable bit for the group (i.e. extend the set to include `0775` and `0664`)
now to avoid breaking some flatpak content.
Closes: #913
Approved by: alexlarsson
Colin Walters [Wed, 7 Jun 2017 17:12:08 +0000 (13:12 -0400)]
tests: Add a test for bare-user-only failing to commit suid content
We didn't have coverage of this before, and adding the test infrastructure will
help ensure we have coverage for more changes here.
Closes: #913
Approved by: alexlarsson
Colin Walters [Mon, 5 Jun 2017 15:32:52 +0000 (11:32 -0400)]
lib/repo: For bare-user, mask content object modes with 0775
Having every object in a bare-user repo (and checkouts) be executable
is ugly. I can't think of a good reason to do that; they should only
be executable if their input is. This does
for `bare-user` what we did for `bare-user-only` in
https://github.com/ostreedev/ostree/pull/909
It's also a stronger version of what we do with `checkout -U` in suppressing
suid - here we also strip world-writable files and the sticky bit (even though
that's meaningless today, it might not be in the future).
Closes: https://github.com/ostreedev/ostree/issues/907
Closes: #908
Approved by: alexlarsson
Colin Walters [Wed, 7 Jun 2017 19:25:21 +0000 (15:25 -0400)]
lib/repofile: Follow symlinks for `g_file_read()`
This avoids `ostree cat /path/to/symlink` crashing, a longstanding embarassing
issue.
Closes: #915
Approved by: jlebon
Colin Walters [Wed, 7 Jun 2017 18:53:06 +0000 (14:53 -0400)]
lib/repofile: Port mostly to new code style
Prep for a bugfix.
Closes: #915
Approved by: jlebon
Colin Walters [Wed, 7 Jun 2017 18:45:42 +0000 (14:45 -0400)]
builtins/cat: Port to new code style
Definitely better. Prep for another fix.
Closes: #915
Approved by: jlebon
Philip Withnall [Wed, 7 Jun 2017 14:41:17 +0000 (15:41 +0100)]
lib/fetcher: Add cleanup function for OstreeFetcher
This is only used internally (the header is not public), so it doesn’t
have to go in ostree-autocleanups.h. It will be used in some following
commits.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #911
Approved by: cgwalters
Philip Withnall [Wed, 7 Jun 2017 13:32:29 +0000 (14:32 +0100)]
lib/repo: Omit deltas from the summary file if there are none
If there are no deltas to be listed in the summary file, don’t bother
including the key for them in the additional metadata section of the
file. This saves a few bytes in some cases.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #911
Approved by: cgwalters
Philip Withnall [Wed, 7 Jun 2017 11:03:57 +0000 (12:03 +0100)]
ostree/dump: Improve formatting for well-known commit metadata keys
This follows on from commit
a946c3d4, which added formatting for
well-known summary metadata keys. This commit adds it for commits.
Currently, the only well-known commit metadata key is
ostree.commit.timestamp. Formatting this correctly is especially
important, since it’s a big-endian uint64, which is completely unusable
for mere mortals when presented as a number rather than a date.
Non-formatted output can still be retrieved using the OSTREE_DUMP_RAW
flag, and the non-formatted key name is always printed for clarity.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #911
Approved by: cgwalters
Philip Withnall [Wed, 7 Jun 2017 13:31:19 +0000 (14:31 +0100)]
lib/pull: Fix an over-indented block
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #911
Approved by: cgwalters
Philip Withnall [Wed, 7 Jun 2017 13:28:23 +0000 (14:28 +0100)]
lib/pull: Drop some trailing whitespace
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #911
Approved by: cgwalters
Philip Withnall [Wed, 7 Jun 2017 13:46:15 +0000 (14:46 +0100)]
lib/pull: Simplify a for-loop initialisation
It’s a bit neater to initialise the loop iterator and maximum in the
same place.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #911
Approved by: cgwalters
Philip Withnall [Wed, 7 Jun 2017 13:46:02 +0000 (14:46 +0100)]
lib/pull: Fix a typo in a documentation comment
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #911
Approved by: cgwalters
Philip Withnall [Wed, 31 May 2017 13:46:40 +0000 (14:46 +0100)]
lib/repo: Reindent some code in regenerate_summary() for clarity
This makes it a bit more easily separable from the rest of the code in
the function. No functional changes.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #911
Approved by: cgwalters
Colin Walters [Tue, 6 Jun 2017 17:34:27 +0000 (13:34 -0400)]
Canonicalize bare-user-only perms with 0755 mask
For the flatpak use case where bare-user-only was introduced, we actually
don't want to support s{u,g} id files in particular.
Actually, I can't think of a reason to have anything outside of the
`0755 i.e. (u=rwx,g=rx,o=rx)` mask, so that's what we do here.
This will have the effect of treating existing `bare-user-only` repositories as
corrupted if they have files outside of that mask, but I think we should do this
now; most of the flatpak users will still be on `bare-user`, and we haven't
changed the semantics of that mode yet.
Note that in this patch we will also *reject* file content that doesn't
match this. This is somewhat asymmetric, since we aren't similarly rejecting
e.g. directory metadata. But, this will close off the biggest source
of the problem for flatpak (setuid binaries).
See: https://github.com/ostreedev/ostree/pull/908
See: https://github.com/flatpak/flatpak/pull/837
Closes: #909
Approved by: alexlarsson
Owen W. Taylor [Wed, 7 Jun 2017 02:51:00 +0000 (22:51 -0400)]
lib/repo: Don't copy xattrs when manipulating the GPG keyring
Copying xattrs when manipulating the GPG keyring for a repository
causes errors when the underlying filesystem doesn't support writing
xattrs - overlayfs is a common example. It also causes the selinux
attributes of the keyring files to be copied from the temporary
location instead of properly inherited from the destination directory
(ending up, for example, as unconfined_u:object_r:user_tmp_t:s0, rather
than unconfined_u:object_r:data_home_t:s0)
Closes: #910
Approved by: cgwalters
Colin Walters [Fri, 2 Jun 2017 19:26:26 +0000 (15:26 -0400)]
Don't install trivial-httpd man page if not enabled
I just noticed this scroll by in a file listing.
Closes: #905
Approved by: jlebon
Jonathan Lebon [Fri, 2 Jun 2017 17:41:33 +0000 (13:41 -0400)]
basic-test.sh: explicitly check for uncompressed objects
It's not enough to check that the dir exists, since that's done by
default when we open the repo. We want to actually check that
uncompressed objects were cached (i.e. the opposite of the earlier error
path).
Closes: #903
Approved by: cgwalters
Jonathan Lebon [Fri, 2 Jun 2017 17:18:49 +0000 (13:18 -0400)]
manual: document bare-user-only repo mode
Closes: #903
Approved by: cgwalters
Jonathan Lebon [Fri, 2 Jun 2017 14:09:23 +0000 (10:09 -0400)]
checkout: also chmod in the user checkout case
When falling back to copying, we previously would only chmod checked out
files in the non-user-checkout mode. Fix this by always doing chmod.
The file_mode was being prepared but never actually applied.
Add a basic test in the archive-z2 --> usermode checkout case in which
we're guaranteed to always fall back to copy mode.
Closes: #633
Closes: #903
Approved by: cgwalters
Jonathan Lebon [Fri, 2 Jun 2017 14:06:50 +0000 (10:06 -0400)]
checkout: don't apply SELinux labeling in user mode
If the user requested a user checkout, we don't want to set the SELinux
label xattr.
Closes: #903
Approved by: cgwalters
Brian C. Lane [Fri, 2 Jun 2017 15:30:43 +0000 (08:30 -0700)]
Remove the OSTREE_MAX_RECURSION limit on metadata depth
This was making it impossible to pull or mirror a large ostree repo, and
according to Colin is no longer necessary. It works fine with a test
against a repo with 2741 commit and 451468 objects in it.
Closes: #899
Closes: #904
Approved by: jlebon
Colin Walters [Fri, 2 Jun 2017 13:27:52 +0000 (09:27 -0400)]
Revert "Add a notion of "physical" sysroot, use for remote writing"
This reverts commit
1eff3e83436b6129c0dc350dbbda52ba330e3834. There
are a few issues with it. It's not a critical thing for now, so
let's ugly up the git history and revisit when we have time to
debug it and add more tests.
Besides the below issue, I noticed that the simple `ostree remote add`
now writes to `/ostree/repo/config` because we *aren't* using the
`--sysroot` argument.
Closes: https://github.com/ostreedev/ostree/issues/901
Closes: #902
Approved by: mike-nguyen
Krzesimir Nowak [Fri, 2 Jun 2017 12:50:29 +0000 (14:50 +0200)]
lib/sysroot: Document the NO_CLEAN flag
Closes: #900
Approved by: jlebon
Colin Walters [Thu, 1 Jun 2017 19:55:15 +0000 (15:55 -0400)]
lib/repo: Delete unused private prototypes
The implementations were removed in:
6ffcb24d227eae5a479caf45adb8037eceb6ae33
I noticed this while looking at the commit code.
Closes: #898
Approved by: jlebon
Colin Walters [Tue, 23 May 2017 20:18:31 +0000 (16:18 -0400)]
repo/commit: Split up metadata/content commit paths
There was a lot of conditionals inside `write_object()` differentating
between metadata/content, and then for content, on the different repo
types. Further, in the metadata path since the logic is simpler, can
present a non-streaming API, and further use `OtTmpfile`, etc.
Splitting them up helps drop a lot of conditionals. We introduce a small
`CleanupUnlinkat` that allows us to fully convert to the new code style in both
functions.
This itself is still prep for fully switching to `GLnxTmpfile`.
Closes: #881
Approved by: jlebon
Colin Walters [Tue, 23 May 2017 19:13:08 +0000 (15:13 -0400)]
repo/commit: Don't renormalize trusted metadata
As the comment in the code says; in the expected checksum case, the caller
really has to have a normal form already.
Closes: #881
Approved by: jlebon
Colin Walters [Tue, 23 May 2017 19:04:50 +0000 (15:04 -0400)]
repo/commit: In the expected checksum case, check existence early
If we have an expected checksum, call `fstatat(repo_dfd, checksum)`
early on before we do much else. This actually duplicates code,
but future work here is going to split up the metadata/content
commit paths, so they'll need to diverge anyways.
Closes: #881
Approved by: jlebon
Colin Walters [Tue, 23 May 2017 18:58:03 +0000 (14:58 -0400)]
repo/commit: Dedup content writing API implementation
Similar to metadata, for `write_content_trusted()` we can just
call `_write_content()` with a `NULL` output checksum.
Closes: #881
Approved by: jlebon
Colin Walters [Tue, 23 May 2017 18:49:17 +0000 (14:49 -0400)]
repo/commit: Dedup metadata writing API implementations
First, the streaming metadata API is pretty dumb, since metadata
should be small. Really we should have supported a `GBytes`
version. Currently, this API *is* used when we do local pulls,
so this commit has test coverage. However, I plan to change
the object import to avoid using this. But that's fine, since
I can't think of why someone would use this API.
Next, the only difference between `ostree_repo_write_metadata()` and
`ostree_repo_write_metadata_trusted()` is whether or not we pass
an output checksum; so just dedup the implementations.
Also while I'm here break out the input length validation and do
it early in the streaming case.
Closes: #881
Approved by: jlebon
Colin Walters [Tue, 30 May 2017 18:07:13 +0000 (14:07 -0400)]
Add a notion of "physical" sysroot, use for remote writing
Using `${sysroot}` to mean the physical storage root: We don't want to write to
`${sysroot}/etc/ostree/remotes.d`, since nothing will read it, and really
`${sysroot}` should just have `/ostree` (ideally). Today the Anaconda rpmostree
code ends up writing there. Fix this by adding a notion of "physical" sysroot.
We determine whether the path is physical by checking for `/sysroot`, which
exists in deployment roots (and there shouldn't be a `${sysroot}/sysroot`).
In order to unit test this, I added a `--sysroot` argument to `remote add`.
However, doing this better would require reworking the command line parsing for
the `remote` argument to support specifying `--repo` or `--sysroot`, and I
didn't quite want to do that yet in this patch.
Closes: https://github.com/ostreedev/ostree/issues/892
Closes: #896
Approved by: jlebon
Colin Walters [Tue, 30 May 2017 17:04:18 +0000 (13:04 -0400)]
lib/util: Some style conversion
I saw a few instances of `glnx_set_error_from_errno() + return FALSE`,
and fixed them and did a bit of style conversion.
Closes: #895
Approved by: jlebon
Colin Walters [Fri, 26 May 2017 21:53:49 +0000 (17:53 -0400)]
cmd: Use autoptr for GKeyFile
Prep for code style conversion.
Closes: #891
Approved by: jlebon
Colin Walters [Fri, 26 May 2017 18:35:34 +0000 (14:35 -0400)]
tree-wide: Add+run spatch to use glnx_throw()
I had to run a sed job to add whitespace after, but otherwise this was easy.
Closes: #890
Approved by: jlebon
Colin Walters [Thu, 25 May 2017 23:38:52 +0000 (19:38 -0400)]
lib/sysroot: Add non-failable ostree_sysroot_repo()
Having a failable accessor is annoying, since it's really common
to reference both. Instead, open the repo once when we load
the sysroot, and provide a non-failable accessor.
This is also prep for `ostree_repo_open_at()`, which collapses the separation
between `ostree_repo_new()` and `ostree_repo_open()`.
Closes: #886
Approved by: jlebon
Colin Walters [Thu, 25 May 2017 21:26:42 +0000 (17:26 -0400)]
lib: Add an "is_system" member to OstreeRepo
This is prep for introducing a fd-relative `ostree_repo_new_at()`.
Previously, `ostree_repo_is_system()` compared `GFile` paths, but
there's a much simpler check we can do first - if this repository
was created via `OstreeSysroot`, it must be a system repo.
Closes: #886
Approved by: jlebon
Colin Walters [Fri, 26 May 2017 17:41:12 +0000 (13:41 -0400)]
lib/fsutil: Port to new code style
Pretty trivial.
Closes: #889
Approved by: jlebon
Colin Walters [Fri, 26 May 2017 17:40:14 +0000 (13:40 -0400)]
lib/fsutil: Delete unused GFile ioctl method
All the deployment code uses fds.
Closes: #889
Approved by: jlebon
Colin Walters [Fri, 26 May 2017 14:22:52 +0000 (10:22 -0400)]
pull-test: Add some 404 tests
See: https://github.com/flatpak/flatpak/issues/816
Closes: #887
Approved by: jlebon
Jonathan Lebon [Thu, 25 May 2017 16:28:15 +0000 (12:28 -0400)]
PAPR: migrate to the new name
The redhat-ci service has been renamed to PAPR. Previous values are
still supported though should be considered deprecated.
Closes: #885
Approved by: cgwalters
Colin Walters [Wed, 24 May 2017 20:43:39 +0000 (16:43 -0400)]
tests: Add some C tests for object writing
Prep for https://github.com/ostreedev/ostree/pull/881
Closes: #884
Approved by: jlebon
Colin Walters [Fri, 17 Mar 2017 21:18:27 +0000 (17:18 -0400)]
lib/deploy: Port config merge logic to new code style
This is a de-scoping of work I did in preparation for
rpm-ostree [live updates](https://github.com/projectatomic/rpm-ostree/pull/652).
Originally I was going to expose this as a public API.
However, I decided to do things differently, but the cleanup here for new code
style and fd-relative is nice to have anyways.
We rework things to use `OstreeDeployment*`, which the caller is expected to
already have, rather than `GFile*`s pointing to the config directories.
Closes: #741
Approved by: jlebon
Alexander Larsson [Wed, 24 May 2017 09:12:05 +0000 (11:12 +0200)]
fetcher: Send Accept-Encoding: gzip when downloading summary
The summary file can get large, but it compresses well (something
which is not true of other files in the ostree repo which are
already compressed). By sending Accept-Encoding: gzip (and
handling the compressed results) we send a lot less data.
I set up the flathub repo (http://flathub.org/repo) to enable
gzip for the summary file (only), and the result is that the
331514 byte large summary was transferred in 122889 bytes.
On my (fast) network this decreased the time i took to do
"flatpak remote-ls flathub" by about 100msec.
This fixes https://github.com/ostreedev/ostree/issues/802
Closes: #882
Approved by: cgwalters
Philip Withnall [Tue, 23 May 2017 12:26:25 +0000 (13:26 +0100)]
build: Use AM_TESTS_ENVIRONMENT rather than TESTS_ENVIRONMENT
TESTS_ENVIRONMENT is reserved for the user to be able to set when
running the tests. AM_TESTS_ENVIRONMENT is for the tests’ Makefile to
set itself.
https://www.gnu.org/software/automake/manual/html_node/Scripts_002dbased-Testsuites.html
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #880
Approved by: cgwalters
Colin Walters [Wed, 17 May 2017 15:02:56 +0000 (11:02 -0400)]
Add stub for new libglnx tmpfile API, port simpler callers to it
It's hard right now to do a full port to the new libglnx tmpfile
API since there are complex cases in the commit path which deal
with symlinks as well.
Let's make things more gradual by introducing the important part (struct with
autocleanup) here in libotutil, port what we can. This will make a future
complete port easier.
Closes: #871
Approved by: jlebon
Colin Walters [Mon, 15 May 2017 21:24:52 +0000 (17:24 -0400)]
bin/cookies: Delete dead tmpfile code in cookie list command
This was a copy-paste-o.
Closes: #871
Approved by: jlebon
Daniel Drake [Mon, 15 May 2017 18:13:38 +0000 (12:13 -0600)]
Allow commits to mark refs as EOL, replaced by others
A commit can now include a "ostree.endoflife-rebase" metadata key
pointing to a new ref.
When updating, the sysroot upgrader will see this and proceed to
pull and deploy the new ref instead. The origin file in the new
deployment will point to the new ref.
This functionality is planned to be used in Endless OS. We will create
a lesser tested branch for brand new, cutting edge hardware support,
and ship that on hardware platforms that require the latest drivers.
However, once our slower-moving official release is later updated to
support the new hardware, we will use this functionality to migrate
those bleeding-edge users over to the official release.
Closes: #874
Approved by: cgwalters
Daniel Drake [Wed, 3 May 2017 15:36:48 +0000 (09:36 -0600)]
libtest: allow committing to alternative branches
This will be used by the upcoming test-admin-upgrade-endoflife.sh
Closes: #874
Approved by: cgwalters
Colin Walters [Fri, 19 May 2017 17:10:45 +0000 (13:10 -0400)]
tests/libtest-core: Copy rpm-ostree changes, clean up
I want to keep this a "pure copy-able" file into various projects
like rpm-ostree, bwrap, and flatpak. Pull in changes from rpm-ostree
to prep for that.
While we have the patient open, dedup the code for file matching a bit.
Closes: #877
Approved by: jlebon
Colin Walters [Fri, 19 May 2017 14:39:48 +0000 (10:39 -0400)]
ci: Add unit case for --enable-experimental-api
We're starting to get a lot of contexts, and this is likely going to drive some
requirements for consolidation and improvements like not testing *every* context
on every PR, etc.
But for now since experimental is new, and under development, let's test it.
Closes: #875
Approved by: cgwalters
Colin Walters [Fri, 19 May 2017 15:00:34 +0000 (11:00 -0400)]
tests/test-symbols.sh: Fix with --enable-experimental-api
We missed a `--no-filename` for grep with the documentation.
Closes: #875
Approved by: cgwalters
Philip Withnall [Fri, 19 May 2017 09:11:35 +0000 (10:11 +0100)]
lib/remote: Fix compilation with --enable-experimental-api
The whole ostree-remote.h file is only included in the public ostree.h
header if OSTREE_ENABLE_EXPERIMENTAL_API is defined, so there’s no need
to change the set of methods defined in it according to whether we’re
compiling with experimental API.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #875
Approved by: cgwalters
Philip Withnall [Thu, 18 May 2017 07:28:03 +0000 (08:28 +0100)]
lib/repo: Make ost_repo_remove_remote() available internally
Make it an internal, not static, API; like _ostree_repo_add_remote(). It
will be used in many the same situations.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #875
Approved by: cgwalters
Philip Withnall [Thu, 18 May 2017 07:26:34 +0000 (08:26 +0100)]
lib/repo: Add return value to _ostree_repo_add_remote()
Return whether the remote already existed. This is an internal API, so
it’s not an API break. The return value will be useful in upcoming
commits for working out whether to later remove a remote again.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #875
Approved by: cgwalters
Philip Withnall [Thu, 18 May 2017 07:17:29 +0000 (08:17 +0100)]
lib/remote: Add arguments to internal OstreeRemote constructor
Add a name argument to the internal OstreeRemote constructor,
since this member (and several derived from it) is non-nullable,
and hence must always be set at construction time.
This changes the only call sites of the constructor to use the new API,
which is internal.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #875
Approved by: cgwalters
Philip Withnall [Thu, 18 May 2017 07:16:18 +0000 (08:16 +0100)]
lib/remote: Add internal annotations to OstreeRemote
Just for internal documentation; g-ir-scanner doesn’t read or understand
them.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #875
Approved by: cgwalters
Philip Withnall [Thu, 18 May 2017 07:11:32 +0000 (08:11 +0100)]
lib/remote: Add a getter for OstreeRemote.name
Now that we’ve got a public, sealed OstreeRemote structure, we can start
carefully exposing members of it as API.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #875
Approved by: cgwalters
Jonathan Lebon [Wed, 17 May 2017 15:41:54 +0000 (11:41 -0400)]
pull: complete detached meta fetch before scanning
If somehow a repo has gpg verification on but doesn't have signatures
present for the existing commit, ostree would error out if it needs to
scan the commit object (e.g. if there are no updates available).
An instance of this is currently happening in Fedora AH, in which
signatures are not shipped in the ISO due to filesystem restrictions.
Another possible scenario is if a content provider switches from not
signing commits to signing them; even if older commits are retroactively
signed, clients' local commit objects would error out if they needed
scanning.
This patch adds a check to ensure that we always attempt to fetch the
detached metadata and wait for its result (whether it exists or not)
before moving on to scan their corresponding commit objects.
See also: https://github.com/projectatomic/rpm-ostree/issues/630
Closes: #873
Approved by: cgwalters
Colin Walters [Tue, 16 May 2017 16:02:25 +0000 (12:02 -0400)]
Release 2017.6
There's already a lot queued. In particular this brings some API
additions that rpm-ostree depends on.
Closes: #865
Approved by: jlebon
Colin Walters [Wed, 17 May 2017 13:55:34 +0000 (09:55 -0400)]
lib/pull: Port some functions to new code style
Porting a lot of this file would be hard since in many cases we do processing in
the `out:` section, so let's do what we can.
Closes: #870
Approved by: jlebon
Colin Walters [Wed, 17 May 2017 01:44:22 +0000 (21:44 -0400)]
switchroot/generator: Add var.mount to local-fs.target.requires
Unbreaks mounting in CentOS. Newer systemd in Fedora pulls didn't need this, I
think due to `RequiresMountsFor=`. Anyways, this is what the fstab generator
does, and it's clearly right ✓.
Closes: https://github.com/ostreedev/ostree/issues/867
Closes: #869
Approved by: jlebon
Colin Walters [Wed, 17 May 2017 01:46:22 +0000 (21:46 -0400)]
build: Use cd $(srcdir) instead of `git -C`
Since the version in CentOS is too old, and we get a spam of warnings, plus
things like detecting the git repo break.
Fixes: 50f73cbac35be97fd5895531e295d05dabaa8ed9
Closes: #868
Approved by: jlebon
Colin Walters [Tue, 16 May 2017 15:30:35 +0000 (11:30 -0400)]
lib/upgrader: Port to new code style
No surprises here. Prep for future work.
Closes: #864
Approved by: jlebon
Colin Walters [Tue, 16 May 2017 14:51:40 +0000 (10:51 -0400)]
lib: Add "open dfd iter handling noent" helper, port tree-wide
Follow up to a previous patch that addressed a double-close; I
realized we already had a helper for doing "open dfd iter, do nothing
if we get ENOENT". Raise it to libotuil, and port all consumers.
Closes: #863
Approved by: jlebon
Colin Walters [Tue, 16 May 2017 16:42:45 +0000 (12:42 -0400)]
tree-wide: Add a few missing O_CLOEXEC
I noticed an instance of this while working on https://github.com/ostreedev/ostree/pull/861
Which apparently I cargo-culted into the new system generator bits.
Let's break this out as a small concise change.
Closes: #866
Approved by: jlebon
Colin Walters [Thu, 11 May 2017 18:54:12 +0000 (14:54 -0400)]
Switch to using a systemd generator for /var
If one wants to set up a mount for `/var` in `/etc/fstab`, it
won't be mounted since `ostree-prepare-root` set up a bind mount for
`/var` to `/sysroot/ostree/$stateroot/var`, and systemd will take
the already extant mount over what's in `/etc/fstab`.
There are a few options to fix this, but what I settled on is parsing
`/etc/fstab` in a generator (exactly like `systemd-fstab-generator` does),
except here we look for an explicit mount for `/var`, and if one *isn't* found,
synthesize the default ostree mount to the stateroot. Another nice property is
that if an admin creates a `var.mount` unit in `/etc` for example, that will
also override our mount.
Note that today ostree doesn't hard depend on systemd, so this behavior only
kicks in if we're built with systemd *and* libmount support (for parsing
`/etc/fstab`). I didn't really test that case though.
Initially I started writing this as a "pure libc" program, but at one point
decided to use `libostree.so` to find the booted deployment. That didn't work
out because `/boot` wasn't necessarily mounted and hence we couldn't find the
bootloader config. A leftover artifact from this is that the generator code
calls into libostree via the "cmd private" infrastructure. But it's an easy way
to share code, and doesn't hurt.
Closes: #859
Approved by: jlebon
Colin Walters [Mon, 15 May 2017 17:59:57 +0000 (13:59 -0400)]
switchroot/remount: Check mount status before remounting, be verbose
By checking the mount status, we avoid remounting things if we don't
need to. And printing a single line per mount helps debugging when
things go wrong.
Closes: #859
Approved by: jlebon
Colin Walters [Fri, 12 May 2017 19:55:12 +0000 (15:55 -0400)]
switchroot/remount: Trim set of remounted filesystems
I really have no idea what I was thinking with that list of mount points. It
seems arbitrary. Sadly `git log` doesn't help, and there's no comments.
Basically, the only mounts we should care about are those that libostree
creates. Which are just `/sysroot` and `/var`. Systemd will handle the other
things like `/tmp`, it's not our job, and we shouldn't touch them.
Closes: #859
Approved by: jlebon
Colin Walters [Tue, 16 May 2017 13:57:31 +0000 (09:57 -0400)]
lib/repo: Fix double close()
Should probably change `_take_fd()` to take a pointer and set to `-1`
at some point.
Regression from
8d58ab1002cbc4a1ecafe3d1a80984f8a60f41e9
Closes: #862
Approved by: jlebon
Colin Walters [Mon, 15 May 2017 13:10:54 +0000 (09:10 -0400)]
lib/remote: Box OstreeRemote if experimental-api
To avoid an introspection warning. Otherwise, don't box it.
Closes: #858
Approved by: pwithnall
Colin Walters [Fri, 12 May 2017 19:34:52 +0000 (15:34 -0400)]
remount: Drop support for auto-tmpfs-on-var; use systemd.volatile=state
In current systemd, there is:
[systemd-volatile-root](https://www.freedesktop.org/software/systemd/man/systemd-volatile-root.service.html)
which was introduced by [this commit](https://github.com/systemd/systemd/commit/
91214a37ef4eb8042d2598aa89bae52b410d11a7).
I'd like to make further changes to how we handle `/var`, and I don't
want to reason about the interaction of our "tmpfs var" with too many
other things.
The comment about having "all /var handling in one place" was always inaccurate
given that we rely on systemd for mounting. And in general, I don't want to
duplicate too many things systemd does - it does them well, documents them, etc.
As far as I know, it was basically just Owen who was using this for the GNOME
hardware testing effort, and I'm sure he could easily switch over to
`systemd.volatile=state`.
Closes: #856
Approved by: owtaylor
Jonathan Lebon [Fri, 12 May 2017 18:17:21 +0000 (14:17 -0400)]
libglnx: bump and use new helper methods
Update submodule: libglnx
Closes: #857
Approved by: cgwalters
Jonathan Lebon [Fri, 12 May 2017 18:14:22 +0000 (14:14 -0400)]
tests/ci-commitmessage-submodules.sh: fix for RHCI
Special-case when this script is run under RHCI, which will try to fetch
the merge commit if possible. Use RHCI_COMMIT instead to refer to the
actual PR/branch HEAD being evaluated.
Use realpath to workaround the developer's git dir being in a symbolic
link.
Closes: #857
Approved by: cgwalters
Colin Walters [Fri, 12 May 2017 00:29:21 +0000 (20:29 -0400)]
lib/checkout: Fix regression in subpath for regular files
This is what caused the merge of
https://github.com/projectatomic/rpm-ostree/pull/652
to blow up, since https://github.com/ostreedev/ostree/pull/848
landed right before we tried to merge it.
When I was writing that PR I remember having an uncertain feeling
since we were doing a `mkdirat` above, but at the time I thought
we'd have test suite coverage...turns out we didn't.
For backwards compatibility, we need to continue to do a `mkdirat` here of the
parent. However...I can't think of a reason anyone would *want* that behavior.
Hence, let's add a special trick - if the destination name is `.`, we skip
`mkdirat()`. That way rpm-ostree for example can open a dfd for `/etc` and avoid
the `mkdir`.
Fold the subpath tests into `test-basic.sh` since it's not worth a separate
file. Add a test case for checking out a file.
Closes: #854
Approved by: jlebon
Colin Walters [Thu, 11 May 2017 14:59:21 +0000 (10:59 -0400)]
tree-wide: Switch tabs ⭾ in various files over to spaces ␠
As $DEITY intended.
I was reading the `prepare-root.c` code and the indentation damage was
distracting. Squash tabs that have leaked into various places in the code. I
didn't yet touch the `src/libostree` bits as that has higher potential for
conflict.
Closes: #852
Approved by: jlebon
Colin Walters [Thu, 11 May 2017 13:08:20 +0000 (09:08 -0400)]
checkout: Plug a memleak of the state stringbuf
A struct without a cleanup macro is a struct likely to leak.
Closes: #850
Approved by: jlebon
Colin Walters [Thu, 11 May 2017 02:19:14 +0000 (22:19 -0400)]
lib/repo: Port more of GPG and summary functions to new code style
These ones were pretty easy, not sure why I didn't do them in an earlier pass.
Closes: #849
Approved by: jlebon
Colin Walters [Thu, 11 May 2017 02:21:27 +0000 (22:21 -0400)]
repo: Fix double close() in summary generation
Happened to notice this while doing a style port.
Closes: #849
Approved by: jlebon
Colin Walters [Thu, 11 May 2017 01:40:50 +0000 (21:40 -0400)]
lib/checkout: Optimize checkout by avoiding OstreeRepoFile recusion
Looking at `perf record ostree checkout`, some things stand out; e.g.:
```
+ 27.63% 0.07% ostree libgio-2.0.so.0.5000.3 [.] g_file_enumerator_iterate
+ 22.74% 0.28% ostree libostree-1.so.1.0.0 [.] ostree_repo_file_tree_query_child
+ 13.74% 0.08% ostree libostree-1.so.1.0.0 [.] ot_variant_bsearch_str
```
The GIO abstractions are already fairly heavyweight, and `OstreeRepoFile` mallocs
a lot too.
Make things more efficient here by dropping the GIO bits for reading ostree data -
we just read from the variants directly and iterate over them. The end result
here is that according to perf we go from ~40% of our time in the kernel to
~70%, and things like `g_file_enumerator_iterate()` drop entirely out of the
hot set.
Closes: #848
Approved by: jlebon
Colin Walters [Thu, 11 May 2017 01:43:26 +0000 (21:43 -0400)]
lib/checkout: Move special case for subpath of file to toplevel
Since we now have a cleaner separation of "toplevel checkout prep"
versus "recursive checkout", handle the special case of checking out
a single file at first rather than later.
Prep for future work in optimizing this function more.
Closes: #848
Approved by: jlebon
Colin Walters [Wed, 10 May 2017 15:08:12 +0000 (11:08 -0400)]
lib/prune: Complete porting to new code style
Only non-mechanical bit here was creating a local autoptr for a bit
where we'd previously done an unref for a struct member.
Closes: #847
Approved by: jlebon
Colin Walters [Thu, 27 Apr 2017 18:24:20 +0000 (14:24 -0400)]
checkout/commit: Use glnx_regfile_copy_bytes() if possible
Rather than `g_output_stream_splice()`, where the input is a regular
file.
See https://github.com/GNOME/libglnx/pull/44 for some more information.
I didn't try to measure the performance difference, but seeing the
read()/write() to/from userspace mixed in with the pointless `poll()` annoyed me
when reading strace.
As a bonus, we will again start using reflinks (if available) for `/etc`,
which is a regression from the https://github.com/ostreedev/ostree/pull/797
changes (which before used `glnx_file_copy_at()`).
Also, for the first time we'll use reflinks when doing commits from file-backed
content. This happens in `rpm-ostree compose tree` today for example.
Update submodule: libglnx
Closes: #817
Approved by: jlebon
Colin Walters [Tue, 9 May 2017 19:55:03 +0000 (15:55 -0400)]
sysroot: More porting to new code style
This isn't all of this file yet, just doing another chunk.
Closes: #845
Approved by: jlebon
Colin Walters [Tue, 9 May 2017 17:39:51 +0000 (13:39 -0400)]
diff: Port some to new code style
Continuing to chip away at this. Using `g_file_enumerator_iterate()`
here helps notably.
I started on the much bigger `ostree_diff_dirs_with_options()` but
it's a lot messier - for later.
Closes: #844
Approved by: jlebon
Colin Walters [Tue, 9 May 2017 15:52:20 +0000 (11:52 -0400)]
ci: Move travis scripts from tests/ → ci/
I think tests/ should be just that, ci/ is separate. Also rename
the files to include "travis" since that's what we use them
for right now.
Closes: #843
Approved by: jlebon
Colin Walters [Mon, 1 May 2017 22:02:27 +0000 (18:02 -0400)]
ci: More flatpak ci fixes
We need our `make install` to override the ostree RPM, so do it all in one txn.
This sort of thing is where a more rigorous model like rdgo/gcontinuous use
becomes better, but we'll hack it with shell for now.
Closes: #824
Approved by: jlebon
Colin Walters [Mon, 8 May 2017 20:44:42 +0000 (16:44 -0400)]
ci: Extend FAH rootfs for installed tests
These at the moment aren't in a container, and may need space. In the future
overlay2 will help here, we can more easily extend the rootfs.
Closes: #840
Approved by: jlebon
Colin Walters [Mon, 8 May 2017 17:37:50 +0000 (13:37 -0400)]
tests: Migrate test-pull-many.sh to installed on FAH
`test-pull-many.sh` is was just too slow to be a unit test. Generating
a bunch of files via shell is slow, the delta generation is slow, etc.
Every developer doesn't need to run it every time.
Somewhat address this by converting it into our installed test framework, which
moves it out of the developer fast paths. Another advantage to this is
that we can simply reuse the FAH tree content rather than synthesizing
new bits each time.
Closes: #840
Approved by: jlebon
Colin Walters [Mon, 8 May 2017 15:20:32 +0000 (11:20 -0400)]
tests: For installed, s/test-/itest-/ to avoid in-tree name clashes
I want to migrate `test-pull-many.sh` → `itest-pull.sh`, hence not
conflicting with the unit test `test-pull.sh.
Closes: #840
Approved by: jlebon
Colin Walters [Mon, 8 May 2017 20:59:14 +0000 (16:59 -0400)]
fsck: Check for refs missing corresponding commit
Just doing this one quickly since it was easy.
Closes: https://github.com/ostreedev/ostree/issues/831
Closes: #841
Approved by: jlebon
Colin Walters [Tue, 9 May 2017 13:26:11 +0000 (09:26 -0400)]
utils/checksum: Port to new code style
Just happened to be reading this code, it's an easy port.
Closes: #842
Approved by: jlebon
Philip Withnall [Sun, 7 May 2017 19:57:53 +0000 (20:57 +0100)]
build: Add -C arguments to some git invocations
This moves the build system a little closer towards being safe for
builddir ≠ srcdir.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #832
Approved by: cgwalters
Philip Withnall [Fri, 21 Apr 2017 15:25:23 +0000 (16:25 +0100)]
libostree: Make OstreeRemote a public and internal API
Previously it was static to ostree-repo.c. Make it usable throughout
libostree so it can be used by an upcoming commit, but also expose the
typedef and reference counting functions so that opaque OstreeRemote
pointers can be used by user code, in anticipation of exposing more of
its API publicly in future.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #832
Approved by: cgwalters
Philip Withnall [Mon, 8 May 2017 15:14:50 +0000 (16:14 +0100)]
libostree: Expose $OSTREE_FEATURES in the pkg-config file
This allows consumers of libostree to check at configure time whether it
supports the feature they want.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #832
Approved by: cgwalters
Philip Withnall [Mon, 1 May 2017 09:59:33 +0000 (10:59 +0100)]
build: Add --enable-experimental-api configure option for unstable APIs
There are currently no unstable APIs, but some will be added in
following commits. They will be built and exposed in the libostree
global symbol list iff configured with --enable-experimental-api.
Distributions should not package OSTree with --enable-experimental-api.
This is designed for previewing new APIs on controlled platforms; any of
the APIs hidden behind this option may be changed or removed at any
point.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #832
Approved by: cgwalters
Colin Walters [Mon, 8 May 2017 14:44:43 +0000 (10:44 -0400)]
Add --enable-installed-tests=exclusive, fix installed case
The major reason to do this is that running tests *both* installed
and uninstalled in our CI is a mostly pointless waste of time.
Particularly given we have a few expensive tests.
We *do* have tests that only run uninstalled (since they require
the source code) like `test-symbols.sh`.
Hence, add `--enable-installed-tests=exclusive` to mean *only* do installed for
most tests.
We'll still have uninstalled coverage via the Travis/Debian configs, and we
could perhaps do another build with a subset of uninstalled tests, but I'm not
really concerned about it.
I'd like to do a renewed push for the InstalledTests model since
I feel it's just fundamentally better. (`g-d-t-r` kind of sucks,
but then so does the automake runner).
Also while we're here - fix the CI to use the correct context,
which started this mess.
Closes: #837
Approved by: dbnicholson
Dan Nicholson [Thu, 4 May 2017 19:58:07 +0000 (14:58 -0500)]
tests: Look for trivial-httpd in $libexecdir
Since
b825aac, trivial-httpd is in $libexecdir/libostree by default and
not available through the ostree runner in PATH. Try to adjust find it
when running the tests installed.
Closes: #837
Approved by: dbnicholson
Dan Nicholson [Thu, 4 May 2017 19:16:21 +0000 (14:16 -0500)]
tests: Install libtest-core.sh with installed tests
Without this, running the installed tests fails dramatically. Remove it
from EXTRA_DIST since dist_installed_test_data takes care of dist.
Closes: #837
Approved by: dbnicholson
Philip Withnall [Mon, 8 May 2017 15:04:26 +0000 (16:04 +0100)]
tests: Fix regex escaping in test-summary-view.sh
There were some regex special characters in the pattern strings, which I
think were causing the test to fail on some Travis builds due to using
an invalid regex.
Fix that by matching using fixed strings instead. We don’t need regexes
here. Use a new assert_file_has_content_literal to do that for us.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #838
Approved by: cgwalters